/**
 * Created by fanyongsheng on 2016/11/2.
 */


//数组集合操作

/**
 * 求出两个数组的差集
 * @param a
 * @returns {Array.<T>}
 */
Array.prototype.diff = function(a) {
    return this.filter(function(i) {return a.indexOf(i) < 0;});
};
//alert([1,2].diff([1]));//[2]

/**
 * 数组去重
 * @returns {*[]}
 */
Array.prototype.unique = function(){
    this.sort(); //先排序
    var res = [this[0]];
    for(var i = 1; i < this.length; i++){
        if(this[i] !== res[res.length - 1]){
            res.push(this[i]);
        }
    }
    return res;
};

/**
 * 删除数组的某个元素
 * @param val
 */
Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
        this.splice(index, 1);
    }
};


//日期集合操作
/**
 * 返回时间格式
 * new Date().Format("yyyy-MM-dd HH:mm:ss");
 * @param fmt
 * @returns {*}
 * @constructor
 */
Date.prototype.Format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //日
        "H+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //分
        "s+": this.getSeconds(),                 //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };

    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));

    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
};


//字符串操作集合
/**
 * 清除空格
 */
String.prototype.trim=function(){
    return this.replace(/(^\s*)|(\s*$)/g, "");
};


//继承判断表单
var Check = {
    'URL': function (URL) {
        var str = URL;
        var Expression = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/;
        var objExp = new RegExp(Expression);
        if (objExp.test(str) == true) {
            return true;
        } else {
            return false;
        }
    },
    'IP': function (ipValue) {
        var re = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; //正则表达式
        if (re.test(ipValue)) {
            if (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256)
                return true;
        }
        return false;
    },
    'phone': function (phone) {
        return /^1[34578]\d{9}$/.test(phone);
    },
    'email': function (email) {
        var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
        return reg.test(email);
    },
    'maxLength':function(val,max){
        if(val.length<max){
            return true;
        }
        return false;
    },
    'minLength':function(val,min){
        if(val.length>min){
            return true;
        }
        return false;
    },
    //是否为整数
    'isNum':function(val){
        var patten = /^-?\d+$/;
        return patten.test(val);
    },
    //是否为小数；
    'isFloat':function(val){
        var patten = /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/;
        return patten.test(val);
    },
    //判断只有数字和英文字母
    'numAndletter':function(val){
        var reg = /^[0-9a-zA-Z]+$/;
        return reg.test(val);
    },
    //判断身份证号
    'cardNo':function(card){
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        return reg.test(card);
    },
    //密码包括数字、字母两种或以上;
    'passwordGroup1': function (pass) {
        var re = /(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%\^&*?]+$/;
        if(!re.test(pass)){
            return false;
        }else{
            return true;
        }
    }
};


function funcLibary(){
    /**
     * 获取url get参数
     * @param name
     * @returns {null}
     */
    this.getQueryString = function(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return unescape(r[2]); return null;
    };

    /**
     * 获取cookie
     * @param name
     * @returns {null}
     */
    this.getCookie = function(name){
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
        if(arr=document.cookie.match(reg))
            return unescape(arr[2]);
        else
            return null;
    };

    /**
     * 删除cookie
     * @param name
     */
    this.delCookie = function(name){
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval=getCookie(name);
        if(cval!=null)
            document.cookie= name + "="+cval+";expires="+exp.toGMTString();
    };

    /**
     * 设置cookie
     * @param name
     * @param value
     * @param time
     * 这是有设定过期时间的使用示例：
     * s20是代表20秒
     * h是指小时，如12小时则是：h12
     * d是天数，30天则：d30
     * setCookie("name","hayden","s20");
     */
    this.setCookie = function(name,value,time){
        var getsec = function(str)
            {
                alert(str);
                var str1=str.substring(1,str.length)*1;
                var str2=str.substring(0,1);
                if (str2=="s")
                {
                    return str1*1000;
                }
                else if (str2=="h")
                {
                    return str1*60*60*1000;
                }
                else if (str2=="d")
                {
                    return str1*24*60*60*1000;
                }
            };
        var strsec = getsec(time);
        var exp = new Date();
        exp.setTime(exp.getTime() + strsec*1);
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    };

    /**
     * 返回url的文件
     * @returns {*}
     */
    this.urlFileName = function(){
        var strUrl = window.location.href;
        var arrUrl = strUrl.split("/");
        var strPage = arrUrl[arrUrl.length - 1];
        return strPage;
    };


    /**
     * 字符转换为UTF-8编码
     * @param s1
     * @returns {string}
     * @constructor
     */
    this.EncodeUtf8 = function(s1){
        var s = escape(s1);
        var sa = s.split("%");
        var retV = "";
        if (sa[0] != "") {
            retV = sa[0];
        }
        for (var i = 1; i < sa.length; i++) {
            if (sa[i].substring(0, 1) == "u") {
                retV += Hex2Utf8(Str2Hex(sa[i].substring(1, 5)));

            }
            else retV += "%" + sa[i];
        }

        return retV;
    }

}